package cn.iocoder.yudao.module.crossborder.logistics.api.dto;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 物流信息 DTO
 *
 * @author LHL
 */
@Schema(description = "RPC 服务 - 物流信息 DTO")
@Data
public class LogisticsDTO {

    @Schema(description = "物流编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
    private Long id;

    @Schema(description = "订单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2048")
    private Long orderId;

    @Schema(description = "物流服务商编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "3072")
    private Long providerId;

    @Schema(description = "物流服务商名称", example = "顺丰速运")
    private String providerName;

    @Schema(description = "物流类型", example = "1")
    private Integer logisticsType;

    @Schema(description = "物流状态", example = "1")
    private Integer status;

    @Schema(description = "跟踪号", example = "SF1234567890")
    private String trackingNumber;

    @Schema(description = "发货地址", example = "广东省深圳市南山区")
    private String originAddress;

    @Schema(description = "收货地址", example = "上海市浦东新区张江高科技园区")
    private String destinationAddress;

    @Schema(description = "收件人姓名", example = "张三")
    private String recipientName;

    @Schema(description = "收件人电话", example = "13800138000")
    private String recipientPhone;

    @Schema(description = "货物重量(kg)", example = "1.5")
    private BigDecimal weight;

    @Schema(description = "货物体积(cm³)", example = "1000")
    private BigDecimal volume;

    @Schema(description = "运费", example = "15.00")
    private BigDecimal freight;

    @Schema(description = "保险费", example = "2.00")
    private BigDecimal insuranceFee;

    @Schema(description = "总费用", example = "17.00")
    private BigDecimal totalFee;

    @Schema(description = "预计发货时间")
    private LocalDateTime estimatedShipTime;

    @Schema(description = "实际发货时间")
    private LocalDateTime actualShipTime;

    @Schema(description = "预计到达时间")
    private LocalDateTime estimatedArrivalTime;

    @Schema(description = "实际到达时间")
    private LocalDateTime actualArrivalTime;

    @Schema(description = "签收时间")
    private LocalDateTime signTime;

    @Schema(description = "签收人", example = "李四")
    private String signPerson;

    @Schema(description = "备注", example = "易碎物品，请小心处理")
    private String remark;

    @Schema(description = "创建时间")
    private LocalDateTime createTime;

    @Schema(description = "更新时间")
    private LocalDateTime updateTime;

}
